#include<stdio.h>
#include<random> 
#define SIZE 3
 
void swap(int *x,int *y)
{
    int temp;
    temp = *x;
    *x = *y;
    *y = temp;
}
 
void rotate(int a[SIZE][SIZE])
{
    int temp[SIZE][SIZE];
    int i,j;
    for(i=0;i<SIZE;i++)
    {
        for(j=0;j<SIZE;j++)
        {
            temp[i][j]=a[SIZE-1-j][i];
        }
    }
    for(i=0;i<SIZE;i++)
    {
        for(j=0;j<SIZE;j++)
        {
            a[i][j]=temp[i][j];
        }
    }
}
 
void rotate90(int a[SIZE][SIZE])
{
    rotate(a);
    rotate(a);
    rotate(a);
}
 
void display(int a[SIZE][SIZE])
{
    int i,j;
    for(i=0;i<SIZE;i++)
    {
        for(j=0;j<SIZE;j++)
        {
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
}
 
 
void shuffle(int a[SIZE][SIZE])
{
    int i,j;
    for(i=0;i<SIZE;i++)
    {
        for(j=0;j<SIZE;j++)
        {
            if(i!=SIZE-1 || j!=SIZE-1)
            {
                int n=rand()%((SIZE-i)*(SIZE-j))+1;
                int x=i,y=j;
                while(n>0)
                {
                    if(y!=SIZE-1)
                    {
                        y++;
                    }
                    else
                    {
                        x++;
                        y=0;
                    }
                    n--;
                }
                swap(&a[i][j],&a[x][y]);
            }
        }
    }
}
 
int main()
{
    int cube[SIZE][SIZE] = {{1, 2, 3},{4, 5, 6},{7, 8, 9}};
    int n;
    printf("Original cube\n");
    display(cube);
    printf("\nEnter number of shuffles : ");
    scanf("%d",&n);
    while(n--)
    {
        shuffle(cube);
    }
    printf("\nShuffled cube\n");
    display(cube);
    printf("\nRotated cube by 90 degree\n");
    rotate90(cube);
    display(cube);
    return 0;
}
